/**
 * <copyright>
 * </copyright>
 *

 */
package org.eclipse.gittab.gitTabDsl.impl;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.impl.EPackageImpl;
import org.eclipse.gittab.gitTabDsl.Beat;
import org.eclipse.gittab.gitTabDsl.Chord;
import org.eclipse.gittab.gitTabDsl.ChordDefinition;
import org.eclipse.gittab.gitTabDsl.ChordLibrary;
import org.eclipse.gittab.gitTabDsl.DownStroke;
import org.eclipse.gittab.gitTabDsl.Fret;
import org.eclipse.gittab.gitTabDsl.GitTabDslFactory;
import org.eclipse.gittab.gitTabDsl.GitTabDslPackage;
import org.eclipse.gittab.gitTabDsl.GuitarSound;
import org.eclipse.gittab.gitTabDsl.GuitarStr;
import org.eclipse.gittab.gitTabDsl.Hold;
import org.eclipse.gittab.gitTabDsl.Import;
import org.eclipse.gittab.gitTabDsl.Note;
import org.eclipse.gittab.gitTabDsl.NoteName;
import org.eclipse.gittab.gitTabDsl.NoteValues;
import org.eclipse.gittab.gitTabDsl.NoteWrapper;
import org.eclipse.gittab.gitTabDsl.Notes;
import org.eclipse.gittab.gitTabDsl.Pause;
import org.eclipse.gittab.gitTabDsl.Sound;
import org.eclipse.gittab.gitTabDsl.Stroke;
import org.eclipse.gittab.gitTabDsl.Tab;
import org.eclipse.gittab.gitTabDsl.TabModel;
import org.eclipse.gittab.gitTabDsl.Tone;
import org.eclipse.gittab.gitTabDsl.Tuning;
import org.eclipse.gittab.gitTabDsl.UpStroke;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class GitTabDslPackageImpl extends EPackageImpl implements GitTabDslPackage
{
  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass tabModelEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass importEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass tuningEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass guitarStrEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass chordLibraryEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass chordDefinitionEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass tabEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass beatEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass toneEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass strokeEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass downStrokeEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass upStrokeEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass pauseEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass holdEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass soundEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass chordEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass noteEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass noteWrapperEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass fretEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass noteNameEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EEnum guitarSoundEEnum = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EEnum notesEEnum = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EEnum noteValuesEEnum = null;

  /**
   * Creates an instance of the model <b>Package</b>, registered with
   * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
   * package URI value.
   * <p>Note: the correct way to create the package is via the static
   * factory method {@link #init init()}, which also performs
   * initialization of the package, or returns the registered package,
   * if one already exists.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see org.eclipse.emf.ecore.EPackage.Registry
   * @see org.eclipse.gittab.gitTabDsl.GitTabDslPackage#eNS_URI
   * @see #init()
   * @generated
   */
  private GitTabDslPackageImpl()
  {
    super(eNS_URI, GitTabDslFactory.eINSTANCE);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private static boolean isInited = false;

  /**
   * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
   * 
   * <p>This method is used to initialize {@link GitTabDslPackage#eINSTANCE} when that field is accessed.
   * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #eNS_URI
   * @see #createPackageContents()
   * @see #initializePackageContents()
   * @generated
   */
  public static GitTabDslPackage init()
  {
    if (isInited) return (GitTabDslPackage)EPackage.Registry.INSTANCE.getEPackage(GitTabDslPackage.eNS_URI);

    // Obtain or create and register package
    GitTabDslPackageImpl theGitTabDslPackage = (GitTabDslPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof GitTabDslPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new GitTabDslPackageImpl());

    isInited = true;

    // Create package meta-data objects
    theGitTabDslPackage.createPackageContents();

    // Initialize created meta-data
    theGitTabDslPackage.initializePackageContents();

    // Mark meta-data to indicate it can't be changed
    theGitTabDslPackage.freeze();

  
    // Update the registry and return the package
    EPackage.Registry.INSTANCE.put(GitTabDslPackage.eNS_URI, theGitTabDslPackage);
    return theGitTabDslPackage;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getTabModel()
  {
    return tabModelEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getTabModel_Imports()
  {
    return (EReference)tabModelEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getTabModel_Tuning()
  {
    return (EReference)tabModelEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getTabModel_ChordLibrary()
  {
    return (EReference)tabModelEClass.getEStructuralFeatures().get(2);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getTabModel_Tab()
  {
    return (EReference)tabModelEClass.getEStructuralFeatures().get(3);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getImport()
  {
    return importEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getImport_ImportURI()
  {
    return (EAttribute)importEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getTuning()
  {
    return tuningEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getTuning_Name()
  {
    return (EAttribute)tuningEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getTuning_Frets()
  {
    return (EAttribute)tuningEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getTuning_Strings()
  {
    return (EReference)tuningEClass.getEStructuralFeatures().get(2);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getGuitarStr()
  {
    return guitarStrEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getGuitarStr_Name()
  {
    return (EAttribute)guitarStrEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getGuitarStr_Note()
  {
    return (EAttribute)guitarStrEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getGuitarStr_Midi()
  {
    return (EAttribute)guitarStrEClass.getEStructuralFeatures().get(2);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getChordLibrary()
  {
    return chordLibraryEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getChordLibrary_Name()
  {
    return (EAttribute)chordLibraryEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getChordLibrary_Chords()
  {
    return (EReference)chordLibraryEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getChordDefinition()
  {
    return chordDefinitionEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getChordDefinition_Name()
  {
    return (EAttribute)chordDefinitionEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getChordDefinition_Notes()
  {
    return (EReference)chordDefinitionEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getTab()
  {
    return tabEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getTab_Name()
  {
    return (EAttribute)tabEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getTab_Author()
  {
    return (EAttribute)tabEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getTab_Tempo()
  {
    return (EAttribute)tabEClass.getEStructuralFeatures().get(2);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getTab_Num()
  {
    return (EAttribute)tabEClass.getEStructuralFeatures().get(3);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getTab_Denom()
  {
    return (EAttribute)tabEClass.getEStructuralFeatures().get(4);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getTab_Guitar()
  {
    return (EAttribute)tabEClass.getEStructuralFeatures().get(5);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getTab_Beat()
  {
    return (EReference)tabEClass.getEStructuralFeatures().get(6);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getBeat()
  {
    return beatEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getBeat_Notes()
  {
    return (EReference)beatEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getBeat_Guitar()
  {
    return (EAttribute)beatEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getBeat_Count()
  {
    return (EAttribute)beatEClass.getEStructuralFeatures().get(2);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getTone()
  {
    return toneEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getTone_Sound()
  {
    return (EReference)toneEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getTone_Value()
  {
    return (EAttribute)toneEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getTone_Strokes()
  {
    return (EReference)toneEClass.getEStructuralFeatures().get(2);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getStroke()
  {
    return strokeEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getStroke_Name()
  {
    return (EAttribute)strokeEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getDownStroke()
  {
    return downStrokeEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getDownStroke_Death()
  {
    return (EAttribute)downStrokeEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getUpStroke()
  {
    return upStrokeEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getUpStroke_Death()
  {
    return (EAttribute)upStrokeEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getPause()
  {
    return pauseEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getHold()
  {
    return holdEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getSound()
  {
    return soundEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getChord()
  {
    return chordEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getChord_Chord()
  {
    return (EReference)chordEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getNote()
  {
    return noteEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getNote_Note()
  {
    return (EReference)noteEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getNote_GitString()
  {
    return (EReference)noteEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getNoteWrapper()
  {
    return noteWrapperEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getFret()
  {
    return fretEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getFret_Fret()
  {
    return (EAttribute)fretEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getNoteName()
  {
    return noteNameEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getNoteName_Note()
  {
    return (EAttribute)noteNameEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getNoteName_Octave()
  {
    return (EAttribute)noteNameEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EEnum getGuitarSound()
  {
    return guitarSoundEEnum;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EEnum getNotes()
  {
    return notesEEnum;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EEnum getNoteValues()
  {
    return noteValuesEEnum;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public GitTabDslFactory getGitTabDslFactory()
  {
    return (GitTabDslFactory)getEFactoryInstance();
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private boolean isCreated = false;

  /**
   * Creates the meta-model objects for the package.  This method is
   * guarded to have no affect on any invocation but its first.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void createPackageContents()
  {
    if (isCreated) return;
    isCreated = true;

    // Create classes and their features
    tabModelEClass = createEClass(TAB_MODEL);
    createEReference(tabModelEClass, TAB_MODEL__IMPORTS);
    createEReference(tabModelEClass, TAB_MODEL__TUNING);
    createEReference(tabModelEClass, TAB_MODEL__CHORD_LIBRARY);
    createEReference(tabModelEClass, TAB_MODEL__TAB);

    importEClass = createEClass(IMPORT);
    createEAttribute(importEClass, IMPORT__IMPORT_URI);

    tuningEClass = createEClass(TUNING);
    createEAttribute(tuningEClass, TUNING__NAME);
    createEAttribute(tuningEClass, TUNING__FRETS);
    createEReference(tuningEClass, TUNING__STRINGS);

    guitarStrEClass = createEClass(GUITAR_STR);
    createEAttribute(guitarStrEClass, GUITAR_STR__NAME);
    createEAttribute(guitarStrEClass, GUITAR_STR__NOTE);
    createEAttribute(guitarStrEClass, GUITAR_STR__MIDI);

    chordLibraryEClass = createEClass(CHORD_LIBRARY);
    createEAttribute(chordLibraryEClass, CHORD_LIBRARY__NAME);
    createEReference(chordLibraryEClass, CHORD_LIBRARY__CHORDS);

    chordDefinitionEClass = createEClass(CHORD_DEFINITION);
    createEAttribute(chordDefinitionEClass, CHORD_DEFINITION__NAME);
    createEReference(chordDefinitionEClass, CHORD_DEFINITION__NOTES);

    tabEClass = createEClass(TAB);
    createEAttribute(tabEClass, TAB__NAME);
    createEAttribute(tabEClass, TAB__AUTHOR);
    createEAttribute(tabEClass, TAB__TEMPO);
    createEAttribute(tabEClass, TAB__NUM);
    createEAttribute(tabEClass, TAB__DENOM);
    createEAttribute(tabEClass, TAB__GUITAR);
    createEReference(tabEClass, TAB__BEAT);

    beatEClass = createEClass(BEAT);
    createEReference(beatEClass, BEAT__NOTES);
    createEAttribute(beatEClass, BEAT__GUITAR);
    createEAttribute(beatEClass, BEAT__COUNT);

    toneEClass = createEClass(TONE);
    createEReference(toneEClass, TONE__SOUND);
    createEAttribute(toneEClass, TONE__VALUE);
    createEReference(toneEClass, TONE__STROKES);

    strokeEClass = createEClass(STROKE);
    createEAttribute(strokeEClass, STROKE__NAME);

    downStrokeEClass = createEClass(DOWN_STROKE);
    createEAttribute(downStrokeEClass, DOWN_STROKE__DEATH);

    upStrokeEClass = createEClass(UP_STROKE);
    createEAttribute(upStrokeEClass, UP_STROKE__DEATH);

    pauseEClass = createEClass(PAUSE);

    holdEClass = createEClass(HOLD);

    soundEClass = createEClass(SOUND);

    chordEClass = createEClass(CHORD);
    createEReference(chordEClass, CHORD__CHORD);

    noteEClass = createEClass(NOTE);
    createEReference(noteEClass, NOTE__NOTE);
    createEReference(noteEClass, NOTE__GIT_STRING);

    noteWrapperEClass = createEClass(NOTE_WRAPPER);

    fretEClass = createEClass(FRET);
    createEAttribute(fretEClass, FRET__FRET);

    noteNameEClass = createEClass(NOTE_NAME);
    createEAttribute(noteNameEClass, NOTE_NAME__NOTE);
    createEAttribute(noteNameEClass, NOTE_NAME__OCTAVE);

    // Create enums
    guitarSoundEEnum = createEEnum(GUITAR_SOUND);
    notesEEnum = createEEnum(NOTES);
    noteValuesEEnum = createEEnum(NOTE_VALUES);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private boolean isInitialized = false;

  /**
   * Complete the initialization of the package and its meta-model.  This
   * method is guarded to have no affect on any invocation but its first.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void initializePackageContents()
  {
    if (isInitialized) return;
    isInitialized = true;

    // Initialize package
    setName(eNAME);
    setNsPrefix(eNS_PREFIX);
    setNsURI(eNS_URI);

    // Create type parameters

    // Set bounds for type parameters

    // Add supertypes to classes
    downStrokeEClass.getESuperTypes().add(this.getStroke());
    upStrokeEClass.getESuperTypes().add(this.getStroke());
    pauseEClass.getESuperTypes().add(this.getStroke());
    holdEClass.getESuperTypes().add(this.getStroke());
    chordEClass.getESuperTypes().add(this.getSound());
    noteEClass.getESuperTypes().add(this.getSound());
    fretEClass.getESuperTypes().add(this.getNoteWrapper());
    noteNameEClass.getESuperTypes().add(this.getNoteWrapper());

    // Initialize classes and features; add operations and parameters
    initEClass(tabModelEClass, TabModel.class, "TabModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getTabModel_Imports(), this.getImport(), null, "imports", null, 0, -1, TabModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getTabModel_Tuning(), this.getTuning(), null, "tuning", null, 0, 1, TabModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getTabModel_ChordLibrary(), this.getChordLibrary(), null, "chordLibrary", null, 0, -1, TabModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getTabModel_Tab(), this.getTab(), null, "tab", null, 0, 1, TabModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(importEClass, Import.class, "Import", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getImport_ImportURI(), ecorePackage.getEString(), "importURI", null, 0, 1, Import.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(tuningEClass, Tuning.class, "Tuning", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getTuning_Name(), ecorePackage.getEString(), "name", null, 0, 1, Tuning.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getTuning_Frets(), ecorePackage.getEInt(), "frets", null, 0, 1, Tuning.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getTuning_Strings(), this.getGuitarStr(), null, "strings", null, 0, -1, Tuning.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(guitarStrEClass, GuitarStr.class, "GuitarStr", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getGuitarStr_Name(), ecorePackage.getEString(), "name", null, 0, 1, GuitarStr.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getGuitarStr_Note(), this.getNotes(), "note", null, 0, 1, GuitarStr.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getGuitarStr_Midi(), ecorePackage.getEInt(), "midi", null, 0, 1, GuitarStr.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(chordLibraryEClass, ChordLibrary.class, "ChordLibrary", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getChordLibrary_Name(), ecorePackage.getEString(), "name", null, 0, 1, ChordLibrary.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getChordLibrary_Chords(), this.getChordDefinition(), null, "chords", null, 0, -1, ChordLibrary.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(chordDefinitionEClass, ChordDefinition.class, "ChordDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getChordDefinition_Name(), ecorePackage.getEString(), "name", null, 0, 1, ChordDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getChordDefinition_Notes(), this.getNote(), null, "notes", null, 0, -1, ChordDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(tabEClass, Tab.class, "Tab", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getTab_Name(), ecorePackage.getEString(), "name", null, 0, 1, Tab.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getTab_Author(), ecorePackage.getEString(), "author", null, 0, 1, Tab.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getTab_Tempo(), ecorePackage.getEInt(), "tempo", null, 0, 1, Tab.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getTab_Num(), ecorePackage.getEInt(), "num", null, 0, 1, Tab.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getTab_Denom(), ecorePackage.getEInt(), "denom", null, 0, 1, Tab.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getTab_Guitar(), this.getGuitarSound(), "guitar", "NULL", 0, 1, Tab.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getTab_Beat(), this.getBeat(), null, "beat", null, 0, -1, Tab.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(beatEClass, Beat.class, "Beat", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getBeat_Notes(), this.getTone(), null, "notes", null, 0, -1, Beat.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getBeat_Guitar(), this.getGuitarSound(), "guitar", "NULL", 0, 1, Beat.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getBeat_Count(), ecorePackage.getEInt(), "count", null, 0, 1, Beat.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(toneEClass, Tone.class, "Tone", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getTone_Sound(), this.getSound(), null, "sound", null, 0, 1, Tone.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getTone_Value(), this.getNoteValues(), "value", null, 0, 1, Tone.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getTone_Strokes(), this.getStroke(), null, "strokes", null, 0, -1, Tone.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(strokeEClass, Stroke.class, "Stroke", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getStroke_Name(), ecorePackage.getEString(), "name", null, 0, 1, Stroke.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(downStrokeEClass, DownStroke.class, "DownStroke", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getDownStroke_Death(), ecorePackage.getEBoolean(), "death", null, 0, 1, DownStroke.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(upStrokeEClass, UpStroke.class, "UpStroke", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getUpStroke_Death(), ecorePackage.getEBoolean(), "death", null, 0, 1, UpStroke.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(pauseEClass, Pause.class, "Pause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

    initEClass(holdEClass, Hold.class, "Hold", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

    initEClass(soundEClass, Sound.class, "Sound", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

    initEClass(chordEClass, Chord.class, "Chord", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getChord_Chord(), this.getChordDefinition(), null, "chord", null, 0, 1, Chord.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(noteEClass, Note.class, "Note", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getNote_Note(), this.getNoteWrapper(), null, "note", null, 0, 1, Note.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getNote_GitString(), this.getGuitarStr(), null, "gitString", null, 0, 1, Note.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(noteWrapperEClass, NoteWrapper.class, "NoteWrapper", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

    initEClass(fretEClass, Fret.class, "Fret", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getFret_Fret(), ecorePackage.getEInt(), "fret", null, 0, 1, Fret.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(noteNameEClass, NoteName.class, "NoteName", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getNoteName_Note(), this.getNotes(), "note", null, 0, 1, NoteName.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getNoteName_Octave(), ecorePackage.getEBoolean(), "octave", null, 0, 1, NoteName.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    // Initialize enums and add enum literals
    initEEnum(guitarSoundEEnum, GuitarSound.class, "GuitarSound");
    addEEnumLiteral(guitarSoundEEnum, GuitarSound.NYLON_ACOUSTIC);
    addEEnumLiteral(guitarSoundEEnum, GuitarSound.STEEL_ACOUSTIC);
    addEEnumLiteral(guitarSoundEEnum, GuitarSound.JAZZ_ELECTRIC);
    addEEnumLiteral(guitarSoundEEnum, GuitarSound.CLEAN);
    addEEnumLiteral(guitarSoundEEnum, GuitarSound.OVERDRIVE);
    addEEnumLiteral(guitarSoundEEnum, GuitarSound.DISTORTION);
    addEEnumLiteral(guitarSoundEEnum, GuitarSound.NULL);

    initEEnum(notesEEnum, Notes.class, "Notes");
    addEEnumLiteral(notesEEnum, Notes.C);
    addEEnumLiteral(notesEEnum, Notes.CIS);
    addEEnumLiteral(notesEEnum, Notes.DES);
    addEEnumLiteral(notesEEnum, Notes.D);
    addEEnumLiteral(notesEEnum, Notes.DIS);
    addEEnumLiteral(notesEEnum, Notes.ES);
    addEEnumLiteral(notesEEnum, Notes.E);
    addEEnumLiteral(notesEEnum, Notes.F);
    addEEnumLiteral(notesEEnum, Notes.FIS);
    addEEnumLiteral(notesEEnum, Notes.GES);
    addEEnumLiteral(notesEEnum, Notes.G);
    addEEnumLiteral(notesEEnum, Notes.GIS);
    addEEnumLiteral(notesEEnum, Notes.AS);
    addEEnumLiteral(notesEEnum, Notes.A);
    addEEnumLiteral(notesEEnum, Notes.AIS);
    addEEnumLiteral(notesEEnum, Notes.BB);
    addEEnumLiteral(notesEEnum, Notes.B);

    initEEnum(noteValuesEEnum, NoteValues.class, "NoteValues");
    addEEnumLiteral(noteValuesEEnum, NoteValues.WHOLE);
    addEEnumLiteral(noteValuesEEnum, NoteValues.HALF);
    addEEnumLiteral(noteValuesEEnum, NoteValues.QUARTER);
    addEEnumLiteral(noteValuesEEnum, NoteValues.EIGHTH);
    addEEnumLiteral(noteValuesEEnum, NoteValues.SIXTEENTH);

    // Create resource
    createResource(eNS_URI);
  }

} //GitTabDslPackageImpl
